Computer applications are developed as a set of computer programs which may interact to share and pass information. The sets of programs may run on a single computer or a set of computers inter-connected by a computer network. Programs running on a single computer may exchange information and states through shared memory. An operating system that manages the resources of a computer provides an abstraction of a process to execute a computer program. A process can be considered as an instance of a program's execution.
A process may be single-threaded or multi-threaded. A single threaded process has only one line of execution whereas a multi-threaded process is one that has several parallel lines of execution (threads) that share a single address space. Threads in a multi-threaded process coordinate with one another to accomplish a task. Some or all multi-threaded processes in an application could employ different threading models. Management of shared resources and task scheduling differs within different threading model environments. For example, in one threading model, the threads could be user threads and in another model the threads could be kernel threads (also called lightweight processes). The major difference between the two models is that the operating system is not aware of user space threads whereas it is aware of the kernel threads and hence can schedule such threads. Another example could be that in one model threads could be non-preemptible whereas they could be preemptible in another. Consider two application processes built on heterogeneous threading models that may need to dispatch and coordinate tasks with one another. This requires a much more complex way of coordinating tasks and state among these processes than the one using a homogeneous threading model. Therefore, there is a need for a method and system for scheduling and coordinating tasks between threads that use multiple processes employing heterogeneous threading models.